package two.chapter_1.c1_3;

import edu.princeton.cs.algs4.StdOut;
import two.chapter_1.c1_1.Printer;


public class Ex1_3_9 {
    /**
     * 从输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式
     * <p>
     * 利用两个栈，一个栈存放数字，一个栈存放符号，遇到"）"时数字栈弹出两个操作数，符号栈弹出一个符号，把计算式重新压入数字栈。重复
     *
     * @param args
     */
    public static void main(String[] args) {

        Stack<String> digtalStack = new LinkStack<>();
        Stack<String> symbolStack = new LinkStack<>();

        String input = "1+2)*3-4)*5-6)))";
        String[] ip = input.split("");

        for (int i = 0; i < ip.length; i++) {
            autocomplete(digtalStack,symbolStack,ip[i]);
        }

        StdOut.println(digtalStack.pop());
    }

    private static void autocomplete(Stack<String> digtalStack,Stack<String> symbolStack,String symbol) {
        switch (symbol) {
            case "+":
            case "-":
            case "*":
            case "/":
                symbolStack.push(symbol);
                break;
            case ")":
                //数字栈弹出两个元素
                String op2=digtalStack.pop();
                String op1=digtalStack.pop();
                //符号栈弹出一个元素
                String s=symbolStack.pop();

                String result="("+op1+s+op2+")";

                digtalStack.push(result);
                break;
            default:
                digtalStack.push(symbol);
                break;
        }
    }

}
